package com.kingsoft.demo.xml.sax;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * SAX解析器
 * 需要实现ContentHandler接口，这里使用DefaultHandler 
 * @author kbl
 *
 */
public class MySAXHandler extends DefaultHandler{


	boolean hasAttribute=false;

    Attributes attributes=null;

    /* 
     * 用于处理文档解析开始事件
     * @see org.xml.sax.helpers.DefaultHandler#startDocument()
     */
    public void startDocument() throws SAXException {

            System.out.println("文档开始打印了");

    }

    /* 
     * 用于处理文档解析结束事件
     * @see org.xml.sax.helpers.DefaultHandler#endDocument()
     */
    public void endDocument() throws SAXException {

           System.out.println("文档打印结束了");

    }

    /*
     * 用于处理元素开始事件
     * 
     * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
     */
    public void startElement(String uri, String localName, String qName,

                  Attributes attributes) throws SAXException {

           if(qName.equals("books")){

                  return;

           }

           if(qName.equals("book")){

                  System.out.println(attributes.getQName(0)+attributes.getValue(0));

           }

           if(attributes.getLength()>0){

                  this.attributes=attributes;

                  this.hasAttribute=true;

           }

    }

    /* 
     * 用于处理元素结束事件
     * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
     */
    public void endElement(String uri, String localName, String qName)

                  throws SAXException {

           if(hasAttribute&&(attributes!=null)){

                  for(int i=0;i<attributes.getLength();i++){

                         System.out.println(attributes.getQName(0)+attributes.getValue(0));

                  }

           }

    }

    /* 
     * 处理元素字符的内容
     * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
     */
    public void characters(char[] ch, int start, int length)

                  throws SAXException {

           System.out.println(new String(ch,start,length));

    }
    
    //处理前缀映射开始事件，参数表示前缀名称和所指向的URI
    @Override
    public void startPrefixMapping(String prefix, String uri)
    		throws SAXException {
    	// TODO Auto-generated method stub
    	super.startPrefixMapping(prefix, uri);
    }
  
    
    @Override
    public void endPrefixMapping(String prefix) throws SAXException {
    	// TODO Auto-generated method stub
    	super.endPrefixMapping(prefix);
    }

    //处理元素中可忽略的空格
    @Override
    public void ignorableWhitespace(char[] ch, int start, int length)
    		throws SAXException {
    	// TODO Auto-generated method stub
    	super.ignorableWhitespace(ch, start, length);
    }
    
    //处理解析中产生的处理指令事件
    @Override
    public void processingInstruction(String target, String data)
    		throws SAXException {
    	// TODO Auto-generated method stub
    	super.processingInstruction(target, data);
    }

    



}
